// Copyright (c) 2022 Presto Labs Pte. Ltd.
// Author: daniel

#pragma once

#include <set>
#include <string>

#include "coin2/exchange/base/order/order.h"
#include "coin2/exchange/bybit_futures/api_order_v3/native_private_client.h"

namespace coin2::exchange::bybit_futures::api_order_v3 {

class BybitFuturesRestAsyncAsioSubscriber : public base::order::RestSubscriber {
 public:
  using RestParams = coin2::exchange::order::BybitRestParams;
  using RestClient = BybitFuturesNativePrivateClient;

 public:
  using RestSubscriber::RestSubscriber;
  auto rest_client() { return dynamic_cast<RestClient*>(rest_client_); }

  void QueryBalance();
  void QueryPosition(const std::string& settle_coin);
  void QueryOpenOrders(const std::string& settle_coin);
  void QueryDoneOrders(const std::string& native_symbol);
  void QueryFills(const std::string& native_symbol);
  void SubscribeAsync() override;
};

}  // namespace coin2::exchange::bybit_futures::api_order_v3
